草庐IT

Java JUnit assertEquals 与 Long

全部标签

c++ - 为什么 "long *"和 "int *"在 32 位代码中不兼容?

我想知道为什么下面的代码不能编译:voidfoo_int(int*a){}voidfoo_long(long*a){}intmain(){inti;longl;foo_long(&i);foo_int(&l);}我使用的是GCC,在C或C++中都无法调用。由于是32位系统,int和long都是有符号的32位整数(可以在编译时用sizeof验证)。我问的原因是我有两个单独的头文件,它们都不在我的控制之下,一个做类似的事情:typedefunsignedlongu32;另一个:typedefunsignedintuint32_t;。声明基本上是兼容的,除了当我像上面的代码片段那样将它们用作

c++ - 为什么 long long union 成员的对齐比包含的 union/struct 大?这个对吗?

来自thisquestion人们可能会开始相信union的一致性不亚于其个体成员的最大一致性。但是我对gcc/g++中的longlong类型有疑问。可以找到完整的示例here,但这里是我的问题的相关部分:unionull{longlongm;};structsll{longlongm;};intmain(){#definepr(v)cout这会产生以下输出:sizeof(longlong):8__alignof__(longlong):8sizeof(ull):8__alignof__(ull):4sizeof(sll):8__alignof__(sll):4为什么union成员的对齐

c++ - 持有 2^63 -1 in long long

我在WindowsXP(代码:Block,MinGW)和Ubuntu(11.04,G++)上运行了以下两段代码我无法运行以下代码#includeusingnamespacestd;intmain(){longlonga=9223372036854775807;cout那个数字是2^63-1。但我会收到一条错误消息:C:\DocumentsandSettings\JohnWong\MyDocuments\codeblock\343_hw_1\main.cpp|9|error:integerconstantistoolargefor"long"type|在ubuntu上-它编译了,但返回的

c++ - 为什么 long int 数据类型的左位移 << 不超过 31?

我想在我的程序中使用以下代码,但gcc不允许我将1左移超过31。sizeof(longint)显示8,那是不是意味着我可以左移到63?#includeusingnamespacestd;intmain(){longintx;x=(~0&~(1编译输出如下警告:leftshift`count>=width`oftype[enabledbydefault]`x=(~0&~(1输出为-1。如果我左移31位,我会得到2147483647,正如int所期望的那样。我希望打开除MSB之外的所有位,从而显示数据类型可以容纳的最大值。 最佳答案 尽

c++ - 如何从 unsigned long long 掩码中获取数字?

我想知道如何反转像this这样的东西.所以有一个mask其中automask=1ULL如何获得20从面具出来? 最佳答案 无循环很多年前,当我为国际象棋引擎编写按位算法时,我发现了一个快速实现,它对您的要求很有用,它是无循环的。此方法将返回第一个1位从右到左(最低有效位)的位置:inlineunsignedintlsb(unsignedlonglongvalue){if(!value)return-1;value&=-value;unsignedintlsb=(unsigned)value|(unsigned)(value>>32)

c++ - 如何将 LONG 转换为 CString?

我想将long转换为cstring。我已经为这个问题苦苦挣扎了一段时间,我看到了很多解决这个问题的变体,或多或少充满了麻烦和焦虑。我知道这个问题似乎很主观,但我认为它真的不应该。当情况涉及MFC和这些情况附带的标准库时,必须有一种方法被认为是最好的。我正在寻找一种行之有效的单行解决方案。有点像C#中的long.ToString()。 最佳答案 就这么简单:longmyLong=0;CStrings;//Youronelinesolutionisbelows.Format("%ld",myLong);

c++ - 为什么带有 unsigned long long 参数的 std::bitset 构造函数未标记为显式?

标准库类模板std::bitset有一个构造函数(C++11及更高版本,C++11之前的unsignedlong参数)constexprbitset(unsignedlonglong)noexcept与许多最佳实践指南相反,此单参数构造函数未标记为explicit.这背后的原理是什么? 最佳答案 显式构造主要反对explicit构造函数是无符号整数的复制初始化不再有效constexprautoN=64;std::bitsetb(0xDEADC0DE);//OK,directinitializationstd::bitsetb=0xD

C++ 计算比 double 或 long double 更精确

我正在自学C++和thispracticequestion它要求编写可以将PI计算为>30位的代码。我了解到double/longdouble在我的电脑上都是16位数字。我认为这个问题的教训是能够计算出超出可用范围的精度。因此,我该怎么做?可能吗?我现在计算Pi的代码是#include"stdafx.h"#include#include#includeusingnamespacestd;intmain(){doublepi;pi=4*atan(1.0);cout输出到16位和pi到30位比较如下。3.14159265358979313.1415926535897932384626433

c++ - 指针数组,如 (*(volatile unsigned long *)0x40004000)

我很难弄清楚如何解决以下问题。我在一个内存很少的嵌入式系统上,想尽量减少内存使用。指针总是让我感到困惑,而且将永远如此。我有一大堆寄存器地址的定义:#defineGPIO_PORTA_BASE(*((volatileunsignedlong*)0x40004000))#defineGPIO_PORTB_BASE(*((volatileunsignedlong*)0x40005000))//etc..这些寄存器可直接访问。例如:GPIO_PORT_BASE&=0x01;我需要的是一个包含上述寄存器的数组,以便我可以轻松地将它们映射到索引。例如:not_sure_what_to_decla

c++ - 当两者都是 32 位宽时,在 C(或 C++)中使用 `unsigned long` 和 `unsigned int` 是否存在可观察到的差异?

我正在使用带有编译器的MPC56XX(嵌入式系统),int和long都是32位宽。在一个必需的软件包中,我们对32位宽的类型有以下定义:typedefsignedintsint32;typedefunsignedintuint32;在新版本中,这在没有太多文档的情况下更改为:typedefsignedlongsint32;typedefunsignedlonguint32;我明白为什么这是一件好事:整数在short和long之间有一个转换等级,所以理论上在使用第一组时可以应用额外的转换定义。我的问题:考虑到包作者强加给我们的上述更改,是否存在可以想象的情况,这样的更改会更改已编译的代码